package com.cryptoneedle.garden.spring;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

/**
 * 多数据源配置类
 * 配置PostgreSQL为主数据源（使用Druid），Doris为辅助数据源
 *
 * @author CryptoNeedle
 * @date 2025-10-31
 */
@Configuration
public class DataSourceConfig {

    /**
     * PostgreSQL数据源配置（主数据源，使用Druid）
     */
    @Bean(name = "pgDataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.pg")
    public DataSource pgDataSource() {
        return new DruidDataSource();
    }

    /**
     * PostgreSQL JdbcTemplate（主数据源）
     */
    @Bean(name = "jdbcTemplate")
    @Primary
    public JdbcTemplate jdbcTemplate(@Qualifier("pgDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    /**
     * Doris数据源配置（使用Druid）
     */
    @Bean(name = "dorisDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.doris")
    public DataSource dorisDataSource() {
        return new DruidDataSource();
    }

    /**
     * Doris JdbcTemplate
     */
    @Bean(name = "dorisJdbcTemplate")
    public JdbcTemplate dorisJdbcTemplate(@Qualifier("dorisDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    /**
     * DolphinScheduler数据源配置（使用Druid）
     */
    @Bean(name = "dolphinDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.dolphin-scheduler")
    public DataSource dolphinDataSource() {
        return new DruidDataSource();
    }

    /**
     * DolphinScheduler JdbcTemplate
     */
    @Bean(name = "dolphinJdbcTemplate")
    public JdbcTemplate dolphinJdbcTemplate(@Qualifier("dolphinDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}